import time

from django.http import JsonResponse
from django.shortcuts import render
from django.views import View

# Create your views here.
"""
关于模型的分析
1.根据页面效果 尽量多的分析字段
2.去分析是保存在一个表中的 还是多个表中的 （多举例说明）

分析表的关系的时候 最多不要超过3个表

多对多（一般是3个表）

学生和老师

学生表 
stu_id     stu_name 
100         张三
200         李四

老师表
teacher_id teacher_name
666         刘老师
999         张老师

第三张表
stu_id  teacher_id
100         666
100         999
200         999
200         666

商品day01   模型的分析-->  FastDFS(用于保存图片，视频等文件)--> 
"""

# ########上传图片方式##########
# from fdfs_client.client import Fdfs_client
#
# # 初始化客户端（配置文件路径根据你的实际情况调整）
# client = Fdfs_client('uitls/fastdfs/client.conf')
#
# # 测试文件上传（功能与原版完全一致）
# client.upload_by_filename(r'C:\Users\21058\Pictures\Saved Pictures\88264815.jpg')

"""
{'Group name': 'group1',
 'Remote file_id': 'group1/M00/00/02/wKi3gGjfnMGAPJSJAAEIJ1ambbQ229.jpg',
 'Status': 'Upload successed.',
 'Local file name': 'C:\\Users\\21058\\Pictures\\Saved Pictures\\88264815.jpg',
 'Uploaded size': '66.04KB',
 'Storage IP': '192.168.183.128'}

"""

#获取file_id .upload_bu_filename 上传成功会返回字典数据
#字典数据中 有file_id

#172.27.154.171
from uitls.goods import get_categories
from apps.contents.models import ContentCategory
class IndexView(View):
    def get(self,request):
        """
        首页数据分为2 部分
        一部分是 商品分类数据
        另一部分是 广告数据
        """
        #1.商品分类数据
        categories = get_categories()
        #2.广告数据
        contents={}
        content_catgories = ContentCategory.objects.all()
        for cat in content_catgories:
            contents[cat.key] =cat.content_set.filter(status=True).order_by('sequence')
        #页面静态化
        #把数据传递给模板
        context = {
            'categories': categories,
            'contents': contents,
        }
        return render(request,'index.html',context)

"""
需求
    根据点击的分类，来获取分类数据（有排序，有分页）
前端
    前端会发送一个axios请求，分类id 在路由中
    分页的页码（第几页数据），每页多少条数据，排序也会传递过去
后端
    请求      接收请求
    业务逻辑   根据需求查询数据，将对象数据转换为字典数据
    响应      JSON
    路由      GET /list/category_id/skus/
    步骤
        1.接收参数
        2.获取分类id
        3.根据分类id进行分类数据的查询验证
        4.获取面包屑数据
        5.查询分类对应的sku数据，然后排序，然后分页
        6.返回响应
"""
from uitls.goods import get_breadcrumb
from apps.goods.models import GoodsCategory, SKU


class ListView(View):
    def get(self,request,category_id):
        # 1.接收参数
        #排序字段
        ordering = request.GET.get('ordering')
        #每页有多少条数据
        page_size = request.GET.get('page_size')
        #要第几页数据
        page = request.GET.get('page')
        # 2.获取分类id
        # 3.根据分类id进行分类数据的查询验证
        try:
            category = GoodsCategory.objects.get(id=category_id)
        except GoodsCategory.DoesNotExist:
            return JsonResponse({'code':400,'errmsg':'参数缺失'})
        # 4.获取面包屑数据
        breadcrumb = get_breadcrumb(category)
        # 5.查询分类对应的sku数据，然后排序，然后分页
        skus = SKU.objects.filter(category=category,is_launched=True).order_by(ordering)
        #分页
        from django.core.paginator import Paginator
        paginator = Paginator(skus,per_page=page_size)
        #获取指定页码的数据
        page_skus = paginator.page(page)
        sku_list = []
        for sku in page_skus.object_list:
            sku_list.append({
                'id': sku.id,
                'default_image_url': sku.default_image.url,
                'name': sku.name,
                'price': sku.price
            })
        #获取总页码
        total_num = paginator.num_pages
        # 6.返回响应
        return JsonResponse({'code':0,'errmsg':'ok','breadcrumb': breadcrumb,
                             'list':sku_list,
                             'count':total_num})


class HotGoodsView(View):
    def get(self,request,category_id):
        skus = SKU.objects.filter(is_launched=True,category_id=category_id).order_by('-sales')[:2]
        host_skus=[]
        for sku in skus:
            host_skus.append({
                'id': sku.id,
                'default_image_url': sku.default_image.url,
                'name': sku.name,
                'price': sku.price
            })
        return JsonResponse({'code':0,'errmsg':'ok','hot_skus':host_skus})

from django.http import JsonResponse
from haystack.views import SearchView
class SKUSearchView(SearchView):
    def create_response(self):
        context = self.get_context()
        sku_list = []
        for sku in context['page'].object_list:
            sku_list.append({
                'id': sku.object.id,
                'name': sku.object.name,
                'price': sku.object.price,
                'default_image_url': sku.object.default_image.url,
                'searchkey': context.get('query'),
                'page_size': context['page'].paginator.num_pages,
                'count': context['page'].paginator.count
            })
        return JsonResponse(sku_list,safe=False)

"""
需求：
    1.分类数据
    2.面包屑
    3.SKU信息
    4.规格信息
"""
from uitls.goods import get_breadcrumb
from uitls.goods import get_goods_specs
from uitls.goods import get_categories
class DetailView(View):
    def get(self,request,sku_id):
        try:
            sku = SKU.objects.get(id=sku_id)
        except SKU.DoesNotExist:
            pass
        #     1.分类数据
        categories = get_categories()
        #     2.面包屑
        breadcrumb = get_breadcrumb(sku.category)
        #     3.SKU信息
        #     4.规格信息
        goods_specs = get_goods_specs(sku)

        context={
            'categories': categories,
            'breadcrumb': breadcrumb,
            'sku': sku,
            'specs':goods_specs
        }
        return render(request, 'detail.html', context)

"""
需求:
    统计每一天的分类商品访问量
前端
    当访问具体页面时，会发送一个axios请求，携带分类id
后端
    请求      接受请求，获取参数
    业务逻辑   查询有没有，有的话更新数据，没有新建数据
    响应      返回JSON
    路由      POST   detail/visit/<category_id>
    步骤      
        1.接收分类id
        2.验证参数
        3.查询当天这个分类有没有
        4.没有新建数据
        5.有 更新数据
        6.返回响应
"""
from apps.goods.models import GoodsVisitCount
import datetime
class CategoryVisitCountView(View):
    def post(self,request,category_id):
        # 1.接收分类id
        # 2.验证参数
        try:
            category=GoodsCategory.objects.get(id=category_id)
        except GoodsCategory.DoesNotExist:
            return JsonResponse({'code':400,'errmsg':'没有此分类'})

        # 3.查询当天这个分类有没有
        today=datetime.date.today()
        try:
            gvc=GoodsVisitCount.objects.get(category=category,date=today)
        except GoodsVisitCount.DoesNotExist:
            # 4.没有新建数据
            GoodsVisitCount.objects.create(category=category,date=today,count=1)
        # 5.有 更新数据
        else:
            gvc.count+=1
            gvc.save()
        # 6.返回响应
        return JsonResponse({'code':0,'errmsg':'ok'})




